package com.ydl.shopping.utils.web;

import cn.hutool.core.util.StrUtil;
import io.jsonwebtoken.Claims;
import org.springframework.stereotype.Component;

import static com.ydl.shopping.constant.SystemConstants.*;

@Component
public class TokenService {
    /**
     * 解析校验登录令牌并返回用户ID
     *
     * @param token 登录令牌
     * @return 用户ID
     */
    public Long getUserId(String token) {
        if (StrUtil.isBlank(token)) {
            return 0L;
        }
        Claims claims = parseToken(token);
        if (claims == null) {
            return 0L;
        }
        String id = claims.getId();
        return Long.valueOf(id);
    }

    /**
     * token解析并校验
     * @param token token令牌
     * @return Claims
     */
    public Claims parseToken(String token) {
        if (StrUtil.isBlank(token)) {
            return null;
        }
        Claims claims = JwtUtil.parseJWT(token);
        if (claims == null) {
            return null;
        }
        // 获取jwt密钥发行方
        if (!claims.getIssuer().equals(JWT_ISSUER)) {
            return null;
        }
        // 获取jwt密钥主题
        if (!claims.getSubject().equals(JWT_SUBJECT)) {
            return null;
        }
        // 获取jwt受众群体
        if (!claims.getAudience().equals(JWT_AUDIENCE)) {
            return null;
        }

        return claims;
    }

    public String generateToken(Long userId) {
        return JwtUtil.generateJwt(userId);
    }
}
